2025.5.29 2D空間の軸回転
次の2次形式を考える。
$ f = 6x^2 + 2xy + 3y^2
$ = \left[\begin{array}{cc} x & y \end{array}\right] \left[\begin{array}{cc} 6 & 2 \\ 2 & 3 \end{array}\right] \left[\begin{array}{c} x \\ y \end{array} \right] = {\bf x}^\top A {\bf x}
$ Aの固有
$ (\lambda_1, \lambda_2) = (2, 7)
固有ベクトル
$ {\bf v}_1 = \left[\begin{array}{c}1/\sqrt{5} \\ -2/\sqrt{5} \end{array}\right] , {\bf v}_2 = \left[\begin{array}{c} 2/\sqrt{5} \\ 1/\sqrt{5} \end{array}\right]
である。
固有ベクトルを並べた行列 $ U とすると、
$ U = \left[\begin{array}{cc}{\bf v}_1 & {\bf v}_2 \end{array}\right]
であり、これは直交行列なので
$ A = UU^\top A U U^\top = U \left[\begin{array}{cc} \lambda_1 & 0 \\ 0 & \lambda_2 \end{array}\right] U^\top = U \Lambda U^\top
となり。もとの2次形式を考慮すると、
$ f = {\bf x}^\top U \Lambda U^\top {\bf x} = {\bf x}'^\top UAU^\top {\bf x}'
となる。$ {\bf x} は新しい座標である。
$ x' = \frac{x}{\sqrt{5}} - \frac{2y}{\sqrt{5}}
$ y' = \frac{2x}{\sqrt{5}} + \frac{y}{\sqrt{5}}
このとき、固有ベクトルによって座標がどのように変換されたのかを確認しよう。
code:p1.py
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 10)
y = np.linspace(-2, 2, 10)
X, Y = np.meshgrid(x, y)
def trans(x, y):
xd = (x - 2*y)/np.sqrt(5)
yd = (2*x + y)/np.sqrt(5)
return (xd, yd)
Xd, Yd = trans(X, Y)
plt.axvline(0, lw=0.5, color='black')
plt.axhline(0, lw=0.5, color='black')
plt.plot(X, Y, '*', color='blue')
plt.plot(Xd, Yd, '*', color='red')
plt.show()
https://scrapbox.io/files/68381523669e87d87575a979.png
次のようにすると、変換後の2次形式は、元の2D空間における座標と次のように対応していることが確認できる。
code:p2.py
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 5)
y = np.linspace(-2, 2, 5)
X, Y = np.meshgrid(x, y)
def trans(x, y):
xd = (x - 2*y)/np.sqrt(5)
yd = (2*x + y)/np.sqrt(5)
return (xd, yd)
Xd, Yd = trans(X, Y)
plt.grid()
plt.axvline(0, lw=0.5, color='black')
plt.axhline(0, lw=0.5, color='black')
for x1, y1, x2, y2 in zip(X, Y, Xd, Yd):
plt.plot(x1, y1, 'x', color='blue')
plt.plot(x2, y2, 'o', color='red')
plt.plot(x1, x2, y1, y2, '-', color='blue')
#plt.quiver(X, Y, Xd, Yd)
plt.show()
回転している。
https://scrapbox.io/files/683817d2d3718f2226f987c8.png
ちょっと修正するとつぎのようになる。
https://scrapbox.io/files/6838182a7fd89127779e6811.png